(PYTHON) Day - 14 Itertools(1)

Reference

  • 문제 출처 - HackerRank
  • 파이썬 연습 - Practice - Python

개인적인 생각과 상상으로 작성한 내용들이 포함되어 있습니다
문제를 풀고 Discussion Tab을 참고하며 코드 스타일을 개선하려고 노력하고자 합니다


HackerRank


Itertools

기본 개념

Itertools
itertools 모듈을 사용하면 빠르고 효율적으로 메모리를 사용하는 반복자를 사용할 수 있다.
모듈의 함수들은 다음과 같이 크게 3가지 용도로 구분할 수 있다.

Infinite Iterators
무한으로 반복할수 있는 함수로 3가지가 있다.

IteratorArgumentsResultsExample
count()start, [step]start, start+step, start+2*step, …count(10) –> 10 11 12 13 14 …
cycle()pp0, p1, … plast, p0, p1, …cycle(‘ABCD’) –> A B C D A B C D …
repeat()elem [,n]elem, elem, elem, … endlessly or up to n timesrepeat(10, 3) –> 10 10 10

Iterators that Terminate
itertools 모듈 대부분의 비중을 차지하는 이 12개의 함수들은 유한번 반복하는 함수들이다.

IteratorArgumentsResultsExample
accumulate()p [,func]p0, p0+p1, p0+p1+p2, …accumulate([1,2,3,4,5]) –> 1 3 6 10 15
chain()p, q, …p0, p1, … plast, q0, q1, …chain(‘ABC’, ‘DEF’) –> A B C D E F
chain.from_iterable()iterablep0, p1, … plast, q0, q1, …chain.from_iterable([‘ABC’, ‘DEF’]) –> A B C D E F
compress()data, selectors(d[0] if s[0]), (d[1] if s[1]), …compress(‘ABCDEF’, [1,0,1,0,1,1]) –> A C E F
dropwhile()pred, seqseq[n], seq[n+1], starting when pred failsdropwhile(lambda x: x<5, [1,4,6,4,1]) –> 6 4 1
filterfalse()pred, seqelements of seq where pred(elem) is falsefilterfalse(lambda x: x%2, range(10)) –> 0 2 4 6 8
groupby()iterable[, key]sub-iterators grouped by value of key(v)
islice()seq, [start,] stop [, step]elements from seq[start:stop:step]islice(‘ABCDEFG’, 2, None) –> C D E F G
starmap()func, seqfunc(seq[0]), func(seq[1]), …starmap(pow, [(2,5), (3,2), (10,3)]) –> 32 9 1000
takewhile()pred, seqseq[0], seq[1], until pred failstakewhile(lambda x: x<5, [1,4,6,4,1]) –> 1 4
tee()it, nit1, it2, … itn splits one iterator into n
zip_longest()p, q, …(p[0], q[0]), (p[1], q[1]), …zip_longest(‘ABCD’, ‘xy’, fillvalue=’-‘) –> Ax By C- D-

Combinatoric Generators
데이터들의 순열과 조합(combination & permutation)을 만드는 함수로 4가지가 있다.

| Iterator | Arguments | Results | Example |
| ——————————- | —————— | ————————————————————- | ———————————————– | —————————————- |
| product() | p, q, … [repeat=1] | cartesian product, equivalent to a nested for-loop | AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD | product(‘ABCD’, repeat=2) |
| permutations() | p[, r] | r-length tuples, all possible orderings, no repeated elements | AB AC AD BA BC BD CA CB CD DA DB DC | permutations(‘ABCD’, 2) |
| combinations() | p, r | r-length tuples, in sorted order, no repeated elements | AB AC AD BC BD CD | combinations(‘ABCD’, 2) |
| combinations_with_replacement() | p, r | r-length tuples, in sorted order, with repeated elements | AA AB AC AD BB BC BD CC CD DD | combinations_with_replacement(‘ABCD’, 2) |


자세한 학습 (참고)

The itertools Module